﻿using System.Linq;
using System.Net.Sockets;

namespace Middleware
{
    public class ServerRequestHandler : RequestHandler
    {
        protected Socket _server { get; set; }
        protected Socket _client { get; set; }

        public ServerRequestHandler(string ip, int port)
            : base(ip, port) {
        }

        /// <summary>
        /// Ficar escutando na porta especificada no construtor.
        /// </summary>
        public void Open() {
            _server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            _server.Bind(_endpoitAddress);
            _server.Listen(100);
        }

        public void Close() {
            _server.Close();
        }

        /// <summary>
        /// Receber mensagem
        /// </summary>
        /// <returns></returns>
        public byte[] Receive() {
            _client = _server.Accept();
            byte[] data = new byte[RequestHandler.MAX_BYTES_PER_MESSAGE];
            int bytes = _client.Receive(data);
            return data.Take(bytes).ToArray();
        }

        /// <summary>
        /// Enviar resposta pela mesma conexão aberta pelo método Receive()
        /// </summary>
        /// <param name="data"></param>
        public void Send(byte[] data) {
            _client.Send(data);
        }
    }
}
